package com.tlvip.design.strategy.old;

/**
 * <p>description：</p>
 * <p>
 * 此种实现方式，存在局限性；
 * 当
 *
 * <p>copyright： copyright(C)2016-2099</p>
 * <p>Life is short,we need passion</p>
 * <p>Summary： </p>
 * <p>instructions： </p>
 * Date 2021/8/14</p>
 * Author mac
 *
 * @version 1.0
 */
public class NoStrategyTest {
    public static void main(String[] args) {
        // 普通僵尸
        AbstractZombie normalZombie = new NormalZombie();
        normalZombie.display();
        normalZombie.attack();
        normalZombie.move();
        System.out.println("----------------------------");
        // 旗手僵尸
        AbstractZombie flagZombie = new FlagZombie();
        flagZombie.display();
        flagZombie.attack();
        flagZombie.move();
        System.out.println("----------------------------");
        // XxZombie
        AbstractZombie xxZombie = new XxZombie();
        xxZombie.attack();
    }

}

// 使用植物大战僵尸中的不同类型僵尸为例来说明问题
abstract class AbstractZombie {
    public abstract void display();

    public void attack() {
        System.out.println("咬.");
    }

    public void move() {
        System.out.println("一步一步移动.");
    }
}

// 普通僵尸
class NormalZombie extends AbstractZombie {

    @Override
    public void display() {
        System.out.println("我是普通僵尸");
    }
}

// 旗手僵尸
class FlagZombie extends AbstractZombie {

    @Override
    public void display() {
        System.out.println("我是旗手僵尸.");
    }
}

// 大头僵尸
class BigZombie extends AbstractZombie {

    @Override
    public void display() {
        System.out.println("大头.");
    }

    // 当出现新类型时，必须重写覆盖，父类的方法还是可以被外界访问，有可能会导致误解
    @Override
    public void attack() {
        System.out.println("头撞.");
    }
}

class XxZombie extends BigZombie {
    @Override
    public void move() {
        System.out.println("xxxx");
    }
}

// 如果还有别的僵尸，攻击方式一样，但移动方式不一样，可能会有很多层的类继承关系，代码不容易维护
